home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / p063b9s.zip / UNIT / MSMISC.PAS < prev    next >
Pascal/Delphi Source File  |  1997-03-02  |  6KB  |  195 lines

  1. UNIT MSMisc;
  2. {╔══════════════════════════════════════════════════════════════════════════╗}
  3. {║ Mail processor init and de-init               Last changed: 02.03.97  SA ║}
  4. {║                                                                          ║}
  5. {║                         (C) Copyright 1989-97 by                         ║}
  6. {║       Dan Wulff, Jens Sandalgaard, Steen Christensen & S¢ren Ager        ║}
  7. {║                                                                          ║}
  8. {║ This source may not be given to anybody, without the written permission  ║}
  9. {║ from The Portal Team.                                                    ║}
  10. {╚══════════════════════════════════════════════════════════════════════════╝}
  11. {$I POPDEFS.INC}
  12.  
  13. INTERFACE
  14.  
  15. USES Use32, PoPTypes, MSDefs;
  16.  
  17. PROCEDURE ReadAreasBBS(VAR AreasBBS:AreasBBSPtr);
  18. PROCEDURE DisposeAreasBBS(VAR AreasBBS:AreasBBSPtr);
  19. PROCEDURE WriteEchoTossLog(VAR AreasBBS:AreasBBSPtr);
  20.  
  21. IMPLEMENTATION
  22.  
  23. USES Globals, Util, NetFile, OpString, Send2Utl, FileUtil, LogFile;
  24.  
  25.   PROCEDURE ReadAreasBBS(VAR AreasBBS:AreasBBSPtr);
  26.   TYPE
  27.     TagListPtr=^TagListType;
  28.     TagListType=RECORD
  29.       Tag      : S30;
  30.       Position : LongInt;
  31.       Next     : TagListPtr;
  32.     END;
  33.  
  34.   VAR
  35.     i,Test   : INTEGER;
  36.     f        : TNetFile;
  37.     a,
  38.     TmpAreas : AreasBBSPtr;
  39.     t,Tmp    : TagListPtr;
  40.     AreasRec : TMsgArea;
  41.     st       : SendToTabType;
  42.     Dupe     : ^DupeBaseType;
  43.  
  44.     FUNCTION FindDupePos(CONST s: S30):LongInt;
  45.     BEGIN
  46.       FindDupePos:=-1;
  47.       Tmp:=t;
  48.       WHILE Tmp<>NIL DO
  49.       BEGIN
  50.         IF Tmp^.Tag=s THEN
  51.         BEGIN
  52.           FindDupePos:=Tmp^.Position;
  53.           Exit;
  54.         END ELSE
  55.           Tmp:=Tmp^.Next;
  56.       END;
  57.     END;
  58.  
  59.   BEGIN
  60.     AreasBBS:=NIL;
  61.     t:=NIL;
  62.     New(Dupe);
  63.     f.Open(StartPath+PoPMsgDupeFileName,SizeOf(DupeBaseType),True);
  64.     WHILE NOT f.EOF DO
  65.     BEGIN
  66.       f.Read(Dupe^,NoKeep,Wait);
  67.       Tmp:=t;
  68.       New(t);
  69.       WITH t^ DO
  70.       BEGIN
  71.         Tag:=Dupe^.Tag;
  72.         position:=f.FILEPOS-1;
  73.         Next:=Tmp;
  74.       END;
  75.     END;
  76.     f.Close;
  77.     IF f.Open(StartPath+PoPMsgAreaFileName,SizeOf(TMsgArea),False) THEN
  78.     BEGIN
  79.       WHILE NOT f.EOF DO
  80.       BEGIN
  81.         f.Read(AreasRec,NoKeep,Wait);
  82.         New(a);
  83.         IF AreasBBS=NIL THEN
  84.           AreasBBS:=a
  85.         ELSE
  86.         BEGIN
  87.           TmpAreas:=AreasBBS;
  88.           WHILE TmpAreas^.Next<>NIL DO
  89.             TmpAreas:=TmpAreas^.Next;
  90.           TmpAreas^.Next:=a;
  91.         END;
  92.         WITH a^ DO
  93.         BEGIN
  94.           { Flyt brugte felter her }
  95.           Area.Directory:=StringToHeap(AreasRec.Directory);
  96.           Area.ImportSB:=AreasRec.ImportSB;
  97.           Area.Scanned:=AreasRec.Scanned;
  98.           Area.ScanDate:=AreasRec.ScanDate;
  99.           Area.MaxScan:=AreasRec.MaxScan;
  100.           Area.UsedAKA:=AreasRec.UsedAKA;
  101.           FOR i:=1 TO 3 DO
  102.             Area.Echonames[i]:=StringToHeap(AreasRec.EchoNames[i]);
  103.           i:=LENGTH(Area.Directory^);
  104.           WHILE (i>0) AND (Area.Directory^[i]<>'\') DO
  105.             DEC(i);
  106.           VAL(COPY(Area.Directory^,i+1,3),QNum,Test);
  107.           DupePos:=FindDupePos(Area.EchoNames[1]^);
  108.           ReadSendTo(AreasRec.SendTo,st,SendNum[1]);
  109.           IF SendNum[1]>0 THEN
  110.           BEGIN
  111.             GetMem(SendTo[1],SizeOf(TFidoAddress)*SendNum[1]);
  112.             MoveFast(st,SendTo[1]^,SizeOf(TFidoAddress)*SendNum[1]);
  113.           END ELSE
  114.             SendTo[1]:=NIL;
  115.           ReadSendTo(AreasRec.SendOnly,st,SendNum[2]);
  116.           IF SendNum[2]>0 THEN
  117.           BEGIN
  118.             GetMem(SendTo[2],SizeOf(TFidoAddress)*SendNum[2]);
  119.             MoveFast(st,SendTo[2]^,SizeOf(TFidoAddress)*SendNum[2]);
  120.           END ELSE
  121.             SendTo[2]:=NIL;
  122.           NewMail:=False;
  123.           Next:=NIL;
  124.         END;
  125.       END;
  126.       f.Close;
  127.     END;
  128.     WHILE t<>NIL DO
  129.     BEGIN
  130.       Tmp:=t;
  131.       t:=t^.Next;
  132.       Dispose(Tmp);
  133.     END;
  134.     Dispose(Dupe);
  135.   END;
  136.  
  137.   PROCEDURE DisposeAreasBBS(VAR AreasBBS:AreasBBSPtr);
  138.   VAR
  139.     tmp:AreasBBSPtr;
  140.     ea:TMsgArea;
  141.     f : TNetFile;
  142.     i:BYTE;
  143.   BEGIN
  144.     IF f.Open(StartPath+PoPMsgAreaFileName,SizeOf(TMsgArea),False) THEN
  145.     BEGIN
  146.       WHILE AreasBBS<>NIL DO
  147.       BEGIN
  148.         Tmp:=AreasBBS;
  149.         AreasBBS:=AreasBBS^.Next;
  150.         IF Tmp^.SendTo[1]<>NIL THEN FreeMem(Tmp^.SendTo[1],SizeOf(TFidoAddress)*Tmp^.SendNum[1]);
  151.         IF Tmp^.SendTo[2]<>NIL THEN FreeMem(Tmp^.SendTo[2],SizeOf(TFidoAddress)*Tmp^.SendNum[2]);
  152.         IF Tmp^.NewMail THEN
  153.         BEGIN
  154.           f.GetRec(ea,f.FILEPOS,keep,wait);
  155.           ea.ScanDate:=Tmp^.Area.ScanDate;
  156.           ea.Scanned:=Tmp^.Area.Scanned;
  157.           f.PutRec(ea,f.FILEPOS-1);
  158.         END ELSE
  159.           f.SEEK(f.FILEPOS+1);
  160.         DisposeString(Tmp^.Area.Directory);
  161.         FOR i:=1 TO 3 DO
  162.           DisposeString(Tmp^.Area.EchoNames[i]);
  163.         Dispose(Tmp);
  164.       END;
  165.       f.Close;
  166.     END;
  167.   END;
  168.  
  169.   PROCEDURE WriteEchoTossLog(VAR AreasBBS:AreasBBSPtr);
  170.   VAR
  171.     f : Text;
  172.     TmpAreas:AreasBBSPtr;
  173.   BEGIN
  174.     IF Cfg.MailScanner.EchoTossLog<>'' THEN
  175.     BEGIN
  176.       Assign(f, Cfg.MailScanner.EchoTossLog);
  177.       REWRITE(f);
  178.       IF IOResult=0 THEN
  179.       BEGIN
  180.         TmpAreas:=AreasBBS;
  181.         WHILE TmpAreas<>NIL DO
  182.         BEGIN
  183.           IF TmpAreas^.NewMail THEN WriteLn(f,TmpAreas^.Area.EchoNames[1]^);
  184.           TmpAreas:=TmpAreas^.Next;
  185.         END;
  186.         Close(f);
  187.       END ELSE
  188.       BEGIN
  189.         AddLog('!','Error creating '+Cfg.MailScanner.EchoTossLog);
  190.       END;
  191.     END;
  192.   END;
  193.  
  194. END.
  195.